package org.study.javafx.study01.tab.code;

import cn.hutool.core.io.resource.ClassPathResource;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import lombok.extern.slf4j.Slf4j;
import org.study.javafx.study01.AppStarter;
import org.study.javafx.study01.config.AppConfig;

/**
 * 参考 https://jialanxiang.blog.csdn.net/article/details/118034723
 *
 * @author doveylovey
 * @version v1.0.0
 * @email 1135782208@qq.com
 * @date 2024年08月18日
 */
@Slf4j
public class TabCode3 extends Application {
    /**
     * 直接运行此方法会报如下错误：
     * 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
     * 请运行 {@link AppStarter#main(String[])}
     */
    public static void main(String[] args) {
        AppConfig.init();
        launch(args);
    }

    @Override
    public void init() throws Exception {
        super.init();
    }

    @Override
    public void start(Stage stage) throws Exception {
        AnchorPane ap = new AnchorPane();
        TabPane tabPane = new TabPane();
        tabPane.setPrefHeight(300);
        tabPane.setPrefWidth(300);
        tabPane.setStyle("-fx-background-color: aqua");

        Tab tab1 = new Tab("TAB1");
        Tab tab2 = new Tab("TAB2");
        Tab tab3 = new Tab("TAB3");

        HBox hbox = new HBox();
        // 单一设置第一个lab的背景颜色
        hbox.setStyle("-fx-background-color: #6b107b");
        // 将按钮剧中
        hbox.setAlignment(Pos.CENTER);
        hbox.getChildren().addAll(new Button("B1"), new Button("B2"));
        tab1.setContent(hbox);
        ImageView iv = new ImageView(new Image(new ClassPathResource("icon/icon.png").getPath()));

        VBox vbox = new VBox();
        vbox.setStyle("-fx-background-color: #277b10");
        vbox.setAlignment(Pos.CENTER);
        vbox.getChildren().addAll(new Button("B3"), new Button("B4"));

        tab2.setContent(vbox);
        tab2.setGraphic(iv);
        // 移除关闭按钮
        tab2.setClosable(false);
        // 默认显示
        tabPane.getSelectionModel().select(tab2);

        // 一个pane上可以放置多个
        tabPane.getTabs().addAll(tab1, tab2, tab3);
        // 将选择面板移动到右侧，默认在上，但是图片文字会跟着改动，下方为设置为正向
        tabPane.setSide(Side.RIGHT);
        tabPane.setRotateGraphic(false);

        ap.getChildren().addAll(tabPane);
        AnchorPane.setTopAnchor(tabPane, 200.0);
        AnchorPane.setLeftAnchor(tabPane, 200.0);
        Scene scene = new Scene(ap);

        stage.setScene(scene);
        stage.setTitle("Java FX  ");
        stage.setWidth(800);
        stage.setHeight(800);
        stage.show();
        // 监听点击的哪个
        tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue.getText()));
        tab1.setOnSelectionChanged(event -> {
            Tab t = (Tab) event.getSource();
            // 会显示两个，因为改变了两个tab的状态
            System.out.println("这是::" + t.getText() + "改变");
        });
        // 点击ap新添加一个tab
        ap.setOnMouseClicked(event -> tabPane.getTabs().add(new Tab("新加的tab")));
    }

    @Override
    public void stop() throws Exception {
        super.stop();
    }
}
